package com.demandbreakdown.xiyun.common.constant;

/**
 * 安全控制相关常量
 *
 * @author poxz
 */
public final class SecurityConstant {

    // ========== Redis Key 前缀 ==========

    /**
     * IP限流前缀
     */
    public static final String IP_RATE_LIMIT_PREFIX = "rate_limit:ip:";

    /**
     * 邮箱验证码限流前缀
     */
    public static final String EMAIL_RATE_LIMIT_PREFIX = "rate_limit:email:";

    /**
     * 邮箱每日限制前缀
     */
    public static final String EMAIL_DAILY_LIMIT_PREFIX = "daily_limit:email:";

    /**
     * Token黑名单前缀
     */
    public static final String TOKEN_BLACKLIST_PREFIX = "token_blacklist:";

    /**
     * 验证码前缀
     */
    public static final String CAPTCHA_KEY_PREFIX = "captcha:";

    // ========== 限流配置 ==========

    /**
     * IP每小时最大请求数
     */
    public static final int IP_RATE_LIMIT_REQUESTS = 10;

    /**
     * IP限流时间窗口（秒）
     */
    public static final int IP_RATE_LIMIT_WINDOW = 3600;

    /**
     * 邮箱验证码发送间隔（秒）
     */
    public static final int EMAIL_RATE_LIMIT_SECONDS = 60;

    /**
     * 每日邮箱验证码发送上限
     */
    public static final int EMAIL_DAILY_LIMIT = 10;

    // ========== 验证码配置 ==========

    /**
     * 验证码长度
     */
    public static final int CAPTCHA_LENGTH = 6;

    /**
     * 验证码过期时间（分钟）
     */
    public static final int CAPTCHA_EXPIRE_MINUTES = 15;

    // ========== IP 相关常量 ==========

    /**
     * 未知IP地址标识
     */
    public static final String UNKNOWN_IP = "unknown";


    // ========== 其他安全配置 ==========

    /**
     * Token黑名单过期时间（分钟）
     */
    public static final int TOKEN_BLACKLIST_EXPIRE_MINUTES = 30;

    /**
     * 操作标识：发送验证码
     */
    public static final String OPERATION_SEND_CAPTCHA = "send_captcha";

    // 私有构造函数，防止实例化
    private SecurityConstant() {
        throw new UnsupportedOperationException("常量类不能被实例化");
    }
}

